<?php
/**
 * Ermittelt, ob sich ein Besucher mit einem Smartphone verbindet
 *
 * @author		Joachim Ruf
 * @copyright	Copyright (c) 2003-2013 Loresoft Software (http://www.loresoft.de)
 * @license		http://yapary.loresoft.de/lizenzbedingungen     New BSD License
 *
 * */


Class Yapary_WWW_UserAgent_SmartphoneType
{
	private $isSmartphone	= false;
	private $type			= NULL;

	private $arrList = array(
			'android',
			'avantgo',
			'blackberry',
			'brew',
			'eudoraweb',
			'fennec',
			'hiptop',
			'ht(c(\-| |_|a|g|p|s|t)|tp)',
			'iemobile',
			'ip(hone|od)',
			'itouch',
			'kindle',
			'lge ',
			'lg( g|\/(k|l|u)|50|54|\-[a-w])', // oder 'lg;',
			'mobile',
			'minimo',
			'mot ',
			'mot-',
			'netfront',
			'nintendo',
			'nokia',
			'opera m(ob|in)i',
			'palm( os)?',
			'pda',
			'phone',
			'samsung',
			'sonyericsson',
			'sie(\-|m)', // oder '^sie-',
			'symbian',
			'teleca',
			'windows ce',
			'wap',	// oder 'wap;', oder ' wap '
			'webos\/'
	);

	private $arrListImmediate = array(
			'ac(er|oo|s\-)',
			'ai(ko|rn)',
			'al(av|ca|co)',
			'an(ex|ny|yw)',
			'be(ck|ll|nq)',
			'ar(ch|go)',
			'avantgo',
			'(android|bb\d+|meego).+mobile',
			'a wa',
			'abac',
			'amoi',
			'aptu',
			'as(te|us)',
			'attw',
			'au(di|\-m|r |s )',
			'avan',

			'bada\/',
			'blazer',
			'bi(lb|rd)',
			'bl(ac|az)',
			'brvw',
			'bumb',
			'bw\-(n|u)',

			'c55\/',
			'capi',
			'ccwa',
			'cdm\-',
			'cell',
			'chtm',
			'cldc',
			'cmd\-',
			'co(mp|nd|mpal)',
			'craw',

			'da(it|ll|ng)',
			'dbte',
			'dc\-s',
			'devi',
			'dica',
			'dmob',
			'do(c|p)o',
			'ds(12|\-d)',

			'el(49|ai|aine)',
			'em(l2|ul)',
			'er(ic|k0)',
			'esl8',
			'ez([4-7]0|os|wa|ze)',

			'fetc)',
			'fly(\-|_)',

			'g1 u',
			'g560',
			'gene',
			'gf\-5',
			'g\-mo',
			'go(\.w|od)',
			'gr(ad|un)',

			'haie',
			'hcit',
			'hd\-(m|p|t)',
			'hei\-',
			'hi(pt|ta)',
			'hp( i|ip)',
			'hs\-c',
			'hu(aw|tc)',

			'iris',
			'i\-(20|go|ma)',
			'i230',
			'iac( |\-|\/)',
			'ibro',
			'idea',
			'ig01',
			'ikom',
			'im1k',
			'inno',
			'ipaq',
			'iris',

			'ja(t|v)a',
			'jbro',
			'jemu',
			'jigs',

			'kddi',
			'keji',
			'kgt( |\/)',
			'klon',
			'kpt ',
			'kwc\-',
			'kyo(c|k)',

			'le(no|xi)',
			'libw',
			'lynx',

			'maemo',
			'midp',
			'mmp',
			'm1\-w',
			'm3ga',
			'm50\/',
			'ma(te|ui|xo)',
			'mc(01|21|ca)',
			'm\-cr|me(rc|ri)',
			'mi(o8|oa|ts)',
			'mmef',
			'mo(01|02|bi|de|do|t(\-| |o|v)|zz)',
			'mt(50|p1|v )',
			'mwbp',
			'mywa',

			'n10[0-2]',
			'n20[2-3]',
			'n30(0|2)',
			'n50(0|2|5)',
			'n7(0(0|1)|10)',
			'ne((c|m)\-|on|tf|wf|wg|wt)',
			'nok(6|i)',
			'nzph',

			'o2im',
			'op(ti|wv)',
			'oran',
			'owg1',

			'p(ixi|re)\/',
			'plucker',
			'pocket',
			'psp',
			'p800',
			'pan(a|d|t)',
			'pdxg',
			'pg(13|\-([1-8]|c))',
			'phil',
			'pire',
			'pl(ay|uc)',
			'pn\-2',
			'po(ck|rt|se)',
			'prox',
			'psio',
			'pt\-g',

			'qa\-a',
			'qc(07|12|21|32|60|\-[2-7]|i\-)',
			'qtek',

			'r380',
			'r600',
			'raks',
			'rim9',
			'ro(ve|zo)',

			'series(4|6)0',
			's55\/',
			'sa(ge|ma|mm|ms|ny|va)',
			'sc(01|h\-|oo|p\-)',
			'sdk\/',
			'se(c(\-|0|1)|47|mc|nd|ri)',
			'sgh\-',
			'shar',
			'sk\-0',
			'sl(45|id)',
			'sm(al|ar|b3|it|t5)',
			'so(ft|ny)',
			'sp(01|h\-|v\-|v )',
			'sy(01|mb)',

			'treo',
			't2(18|50)',
			't6(00|10|18)',
			'ta(gt|lk)',
			'tcl\-',
			'tdg\-',
			'tel(i|m)',
			'tim\-',
			't\-mo',
			'to(pl|sh)',
			'ts(70|m\-|m3|m5)',
			'tx\-9',

			'up\.(browser|link)',
			'up(\.b|g1|si)',
			'utst',

			'vodafone',
			'v400',
			'v750',
			'veri',
			'vi(rg|te)',
			'vk(40|5[0-3]|\-v)',
			'vm40',
			'voda',
			'vulc',
			'vx(52|53|60|61|70|80|81|83|85|98)',

			'w3c(\-| )',
			'webc',
			'whit',
			'wi(g |nc|nw)',
			'wmlb',
			'wonu',

			'xda',
			'xiino',
			'x700',

			'yas\-',
			'your',

			'zeto',
			'zte',

			'50[1-6]i',
			'1207',
			'6(310|590)',
			'3gso',
			'4thp',
			'770s',
			'802s',
	);

	/**
	 * @desc Prueft, ob es sich bei einem Browser um ein Smartphone handelt
	 * @param boolean $immediate	: false=Ueberpruefung der bekanntesten Smartphone-Type
	 * 								  true= Ueberpruefung aller bekannten Smartphone-Type
	 * */
	function __construct ($immediate = false) {
		foreach ($this->arrList as $key => $val) {
			if (preg_match("/$val/i", $_SERVER['HTTP_USER_AGENT'], $arrResult)) {
				$this->isSmartphone = true;
				$this->type = $arrResult[0];
				return;
			}
		}

		if ($immediate === true) {
			foreach ($this->arrListImmediate as $key => $val) {
				if (preg_match("/$val/i", $_SERVER['HTTP_USER_AGENT'], $arrResult)) {
					$this->isSmartphone = true;
					$this->type = $arrResult[0];
					return;
				}
			}
		}

	}


	/**
	 * @desc Prueft, ob es sich bei einem Besucher um einen Smartphone-Besucher handelt.
	 * @return string
	 * */
	public function isSmartphone ()
	{
		return $this->isSmartphone;
	}


	/**
	 * @desc Gibt den Browsertyp des Besuchers aus.
	 * @return string
	 * */
	public function getType ()
	{
		return $this->type;
	}


}


?>